﻿#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//int main()
//{
//	char arr[20] = { 0 };
//	while (scanf("%s", arr) == 1)
//	{
//		int len = strlen(arr);
//		int i = 0;
//		for (i = 0; i < len; i++)
//		{
//			int j = 0;
//			for (j = 0; j < len - 1 - i; j++)
//			{
//				if (arr[j] > arr[j + 1])
//				{
//					char tmp = arr[j + 1];
//					arr[j + 1] = arr[j];
//					arr[j] = tmp;
//				}
//			}
//		}
//		printf("%s", arr);
//	}
//	system("pause");
//}

//int pivotIndex(int* nums, int numsSize)
//{
//	int i = 0;
//	for (i = 0; i < numsSize; i++)//先判断第一个元素是否是中间值
//	{
//		int j = 0;
//		int leftsum = 0;
//		int rightsum = 0;
//		for (j = 0; j < numsSize; j++)
//		{
//			if (i > j)
//			{
//				leftsum += nums[j];
//			}
//			else if(i < j)
//			{
//				rightsum += nums[j];
//			}
//		}
//		if (leftsum == rightsum)
//		{
//			return i;
//		}
//	}
//	return -1;
//}
//int main()
//{
//	int nums[] = { 2, 1, -1 };
//	int sz = sizeof(nums) / sizeof(nums[0]);
//	int ret = pivotIndex(nums, sz);
//	printf("%d", ret);
//	system("pause");
//}


//int main()
//{
//	char arr[20] = { 0 };
//	char str[129] = { 0 };
//	scanf("%s", arr);
//	int count = 0;
//	int len = sizeof(arr);
//	char* p = arr;
//	int i = 0;
//	for (i = 0; i < len; i++)
//	{
//		if (str[p[i]] != 1 && p[i]!='\0')
//			count++;
//		str[p[i]] = 1;
//	}
//	printf("%d", count);
//	
//	system("pause");
//}

//
//int main()
//{
//	char arr[20] = { 0 };
//	char str[127] = { 0 };
//	scanf("%s", arr);
//	char* p = arr;
//	int count = 0;
//	while (*p)
//	{
//		if (str[*p] != 1)
//		{
//			count++;
//		}
//		str[*p++] = 1;
//	}
//	printf("%d", count);
//	system("pause");
//}


//
//int main()
//{
//	int nums[6] = { 1,2,3,4,5,6 };
//	int* p = nums;//数组名代表首元素地址
//
//	printf("*++p:%d\n", *++p);
//	//这时指针已经指向了nums[0] （第一个元素）
//	printf("*p++:%d\n", *p++); //执行P++时，还是指向一开始位置，但执行后P指向初地址的下一个位置了
//	
//	//这时指针已经指向了nums[1] （第二个元素）
//	printf("(*p)++:%d\n", (*p)++); //先去指针p指向的值（数组第2个元素），再将该值自增1
//	
//	//这时指针已经指向nums[2]（第三个元素）
//	printf("++*p:%d\n", ++*p); //先将指针p自增1（此时指向数组第4个元素），* 操作再取出该值
//
//	//这时指针已经指向nums[3]（第4个元素）
//	/*printf("*++p:%d\n", *++p);*///先将指针p自增1（此时指向数组第5个元素），* 操作再取出该值值
//
//	printf("\n\n\n\n\n\n\n");
//	system("pause");
//}

//int majorityElement(int* nums, int numsSize)
//{
//	int count = 1;
//	int i = 0;
//	int tmp = nums[0];
//	for (i = 1; i < numsSize; i++)
//	{
//		if (tmp == nums[i])
//		{
//			count++;
//		}
//		else
//		{
//			count--;
//		}
//		if (count==0)
//			tmp = nums[i + 1];
//	}
//	return tmp;
//}
//int main()
//{
//	int nums[] = {2, 4, 6,8,9,3, 3,3,3,3};
//	int len = sizeof(nums) / sizeof(nums[0]);
//	int ret = majorityElement(nums, len);
//	printf("%d", ret);
//	system("pause");
//}


//int* selfDividingNumbers(int left, int right, int* returnSize)
//{
//	int* ttp = (int*)malloc(10000);
//	*returnSize = 0;
//	int i = left;
//	int j = right;
//	for (i; i <= j; i++)
//	{
//		int num = i;
//		while (num)
//		{
//			int tmp = num % 10;
//			if ( tmp == 0|| i % tmp != 0)
//				break;
//			num = num / 10;
//		}
//		if (num == 0)
//			ttp[(*returnSize)++] = i;
//	}
//	return ttp;
//}
//int main()
//{
//	int left = 1;
//	int right = 22;
//	int returnsize = 0;
//	int i = 0;
//	int* ret = selfDividingNumbers(left, right, &returnsize);
//	for (i = 0; i < returnsize; i++)
//	{
//		printf("%d,", ret[i]);
//	}
//	free(ret);
//	system("pause");
//}


//#include<string.h>
//
//int* productExceptSelf(int* nums, int numsSize, int* returnSize) {
//	int* ret = (int*)malloc(numsSize * sizeof(int));
//	*returnSize = numsSize;
//	int left = 1, right = 1;
//	//第一次循环，将当前位置左边的数字乘积填入返回数组中
//	for (int i = 0; i < numsSize; i++) {
//		ret[i] = left;// 1 nums[0] nums[0]*nums[1] num[0]*nums[1]*nums[2] ....
//		left *= nums[i];
//	}
//	//第二次循环，对于返回数组的元素从后往前进行，每次乘以右边元素的乘积
//	for (int i = numsSize - 1; i >= 0; i--) {
//		ret[i] *= right; //最后一个成绩不需要乘以最后元素，乘以1就行
//		right *= nums[i]; //right变化：1 nums[end] nums[end]*nums[end-1] .....
//	}
//	return ret;
//}
//int main()
//{
//	int nums[] = { 2,3,4 };
//	             //24,12,8
//	int len = sizeof(nums) / sizeof(nums[0]);
//	int returnsize = 0;
//	int i = 0;
//	int* ret = productExceptSelf(nums, len, &returnsize);
//	for (i = 0; i < returnsize; i++)
//	{
//		printf("%d ", ret[i]);
//	}
//	system("pause");
//}

//
//int* productExceptSelf(int nums[], int numsSize, int* returnSize)
//{
//	int left = 1;
//	int right = 1;
//	*returnSize = numsSize;
//	int i = 0;
//	int j = 0;
//	int* ret = (int*)malloc(12);
//	if (ret == NULL)
//	{
//		perror("err:");
//		return 0;
//	}
//	for (i = 0; i < numsSize; i++)
//	{
//		ret[i] = left;
//		left *= nums[i];
//	}
//	for (i = numsSize - 1; i >= 0; i--)
//	{
//		ret[i] *= right;
//		right *= nums[i];
//	}
//	return ret;
//}
//
//int main()
//{
//	int nums[] = {2,3,4};
//	int len = sizeof(nums) / sizeof(nums[0]);
//	int returnsize = 0;
//	int* ret = productExceptSelf(nums, len, &returnsize);
//	int i = 0;
//	for (i = 0; i < returnsize; i++)
//	{
//		printf("%d ", ret[i]);
//	}
//	system("pause");
//}